package com.hujun.common.util;

import java.math.BigDecimal;

public class BigDecimalUtils {
	//默认除法运算精度   
    private static final int DEF_DIV_SCALE = 5; 
    
    /**
     * 加
     * @param a
     * @param b
     * @return
     */
    public static double add(double a, double b){
    	BigDecimal bigDecimalA = new BigDecimal(Double.toString(a));
    	BigDecimal bigDecimalB = new BigDecimal(Double.toString(b));
    	return bigDecimalA.add(bigDecimalB).doubleValue();
    }
    /**
     * 减
     */
    public static double sub(double a, double b){
    	BigDecimal bigDecimalA = new BigDecimal(Double.toString(a));
    	BigDecimal bigDecimalB = new BigDecimal(Double.toString(b));
    	return bigDecimalA.subtract(bigDecimalB).doubleValue();
    }
    /**
     * 乘法
     * @param a
     * @param b
     * @return
     */
    public static double multiplication(double a,double b){
    	BigDecimal bigDecimalA = new BigDecimal(Double.toString(a));
    	BigDecimal bigDecimalB = new BigDecimal(Double.toString(b));
    	return bigDecimalA.multiply(bigDecimalB).doubleValue();
    }
    /**
     * 除法，默认精度为5
     * @param a
     * @param b
     * @return
     */
    public static double division(double a, double b){
    	return division(a, b, DEF_DIV_SCALE);
    }
    
    /**
     * 除法
     * @param a
     * @param b
     * @param scale 精度
     * @return
     */
    public static double division(double a, double b, int scale){
    	if(scale < 0){
    		throw new IllegalArgumentException("scale must greater than 0");
    	}
    	BigDecimal bigDecimalA = new BigDecimal(Double.toString(a));
    	BigDecimal bigDecimalB = new BigDecimal(Double.toString(b));
    	return bigDecimalA.divide(bigDecimalB, scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    
    /**
     * 四舍五入
     * @param a
     * @param scale
     * @return
     */
    public static double round(double a, int scale){
    	if(scale < 0){
    		throw new IllegalArgumentException("scale must greater than 0");
    	}
    	BigDecimal bigDecimalA = new BigDecimal(Double.toString(a));
    	BigDecimal bigDecimalB = new BigDecimal("1");
    	return bigDecimalA.divide(bigDecimalB, scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    
}
